import { login, getUserInfo } from '@/api/user'
import { getToken, setToken, removeToken, getUserId, setUserId, removeUserId, setTimeStamp, setLang } from '@/utils/auth'
import { resetRouter } from '@/router'
// 状态
// 初始化的时候从缓存中获取状态，并且赋值到初始化状态上
const state = {
  token: getToken(), // 设置token的初始状态
  userId: getUserId(), // 设置userId的初始值
  userInfo: {}// 存储用户资料
}
// 修改状态
const mutations = {
  // 设置状态
  setToken(state, data) {
    state.token = data.token// 设置token,只是修改state的数据
    state.userId = data.user_id// 设置userId,只是修改state的数据
    // vuex值发现变化，缓存数据
    // vuex数据与缓存同步
    setToken(data.token)
    setUserId(data.user_id)
  },
  removeToken(state) {
    state.token = null// 将vuex的数据置空
    // 同步缓存
    removeToken()
    removeUserId()
  },
  // 设置用户资料
  setUserInfo(state, result) {
    setLang(result.language)
    state.userInfo = result
  },
  // 删除userinfo的资料
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async login(context, data) {
    // 调用登入api
    const result = await login(data)
    context.commit('setToken', result)// 存入token
    // 存入时间戳
    setTimeStamp()
  },
  // 获取用户信息action
  async getUserInfo(context) {
    // 调用api
    const result = await getUserInfo()
    // 提交到mutations处理
    context.commit('setUserInfo', result)
    return result
  },
  // 退出登入逻辑
  logout(context) {
    // 清除token
    context.commit('removeToken')
    // 清除管理员资料
    context.commit('removeUserInfo')
    // 重置路由
    resetRouter()
    // 还有一步  vuex中的数据是不是还在
    // 要清空permission模块下的state数据
    // vuex中 user子模块  permission子模块
    // 子模块调用子模块的action  默认情况下 子模块的context是子模块的
    // 父模块 调用 子模块的action
    context.commit('permission/setRoutes', [], { root: true })
    // 子模块调用子模块的action 可以 将 commit的第三个参数 设置成  { root: true } 就表示当前的context不是子模块了 而是父模块
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
